Python机器学习·微教程
Python目前是机器学习领域增长最快速的编程语言之一。
该教程共分为11小节。在这个教程里,你将学会:
如何处理数据集,并构建精确的预测模型
使用Python完成真实的机器学习项目
这是一个非常简洁且实用的教程,希望你能收藏,以备后面复习!
接下来进入正题~
这个微课程适合谁学习?
熟悉python语法,会写简单脚本。这意味着你在此之前接触过python,或者懂得其它编程语言,类C语言都是可以的。
了解机器学习的基本概念。基本概念包括知道什么是监督学习、非监督学习、分类和预测的区别、交叉验证、简单算法。不要被这些吓到了,并非要求你是个机器学习专家,只是你要知道如何查找并学习使用。
教程目录
第1节:下载并安装python及Scipy生态
# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))
第2节:熟悉使用python、numpy、matplotlib和pandas
使用python列表
使用numpy array数组操作
使用matplotlib简单绘图
使用pandas两种数据结构Series和DataFrame
# 导入各个库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
myarray = np.array([[1, 2, 3], [4, 5, 6]]) # 使用numpy数组
rownames = ['a', 'b']
colnames = ['one', 'two', 'three'] # 使用列表操作
mydataframe = pd.DataFrame(myarray, index=rownames, columns=colnames) #生成DataFrame
print(mydataframe)
mp = plt.plot(myarray) # 使用matplotlib绘制简单图表
plt.show() # 显示图像
第3节:加载CSV数据
使用标准库中CSV的CSV.reader()加载
使用第三方库numpy中的numpy.loadtxt()加载
使用第三方库pandas中的pandas.read_csv()加载
# Load CSV using Pandas from URL
import pandas # 导入pandas库
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 读取数据
print(data.head(5)) # 打印数据集前5行
第4节:对数据进行描述性统计分析
使用head()和tail()函数查看数据样本
使用shape属性查看数据规格
使用dtypes属性查看每个变量的数据类型
使用describe()函数查看数据描述
使用corr()函数计算各个变量之间的相关性
# Load CSV using Pandas from URL
import pandas # 导入pandas库
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 读取数据
head_5 = data.head(5) # 查看前5行
print(head_5)
tail_5 = data.tail(5) # 查看后5行
print(tail_5)
shape_ = data.shape # 查看数据规格,即多少行多少列
print(shape)
dtypes_ = data.dtypes # 查看每个变量的数据类型
print(dtypes_)
corr_ = data.corr() # 查看各个变量之间的相关性
print(corr_)
description = data.describe() # 查看数据描述
print(description)
第5节:对数据进行可视化分析
使用hist()方法创建每个变量的直方图
使用plot(kind='box')方法创建每个变量的箱图
使用plotting.scatter_matrix()方法创建矩阵散点图
# Load CSV using Pandas from URL
import pandas # 导入pandas库
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 读取数据
import matplotlib.pyplot as plt # 导入绘图模块
data.hist() # 直方图
data.plot(kind='box') # 箱图
pd.plotting.scatter_matrix(data) # 矩阵散点图
plt.show() # 展示图表
第6节:数据预处理
数据标准化。数据标准化是将数据按比例缩放,使之落入一个小的特定区间。有利于提升模型的收敛速度和模型精度。比较典型的标准化方法有min-max标准化、z-score 标准化、归一化等
数据二值化。特征二值化是对数值特征进行阈值处理以获得布尔值的过程,根据阈值将数据二值化(将特征值设置为0或1)大于阈值的值映射到1,而小于或等于阈值的值映射到0.默认阈值为0时,只有正值映射到1。方法有Binarizing等。
分类数据连续化。通常,特征不是作为连续值给出的,而是文本字符串或者数字编码的类别。比如性别数据通常是
["男", "女"]
这样的数据, 可以编码成[1,2]
, 但是这种数据通常不是可以直接进入机器学习模型的。将这种分类数据进行连续化的方法最著名的就是one-hot-encoding
估算缺失的值。由于各种原因,许多真实世界的数据集包含缺失值,通常编码为空白,NaN或其他占位符。然而,这样的数据集与scikit-learn估计器不兼容,它们假定数组中的所有值都是数值的,并且都具有并保持含义。使用不完整数据集的基本策略是放弃包含缺失值的整个行和/或列。然而,这是以丢失可能有价值的数据为代价的(尽管不完整)。更好的策略是推算缺失值,即从数据的已知部分推断它们。
fit(x,y):传入数据以及标签即可训练模型,训练的时间和参数设置,数据集大小以及数据本身的特点有关
score(x,y)用于对模型的正确率进行评分(范围0-1)。但由于对在不同的问题下,评判模型优劣的的标准不限于简单的正确率,可能还包括召回率或者是查准率等其他的指标,特别是对于类别失衡的样本,准确率并不能很好的评估模型的优劣,因此在对模型进行评估时,不要轻易的被score的得分蒙蔽。
predict(x)用于对数据的预测,它接受输入,并输出预测标签,输出的格式为numpy数组。我们通常使用这个方法返回测试的结果,再将这个结果用于评估模型。
fit(x,y):该方法接受输入和标签,计算出数据变换的方式。
transform(x):根据已经计算出的变换方式,返回对输入数据x变换后的结果(不改变x)
fit_transform(x,y) :该方法在计算出数据变换方式之后对输入x就地转换。
# 标准化数据 (0 mean, 1 stdev)
from sklearn.preprocessing import StandardScaler # 导入标准化函数
import pandas
import numpy
# 读取数据
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
# 将数据分割为输入和响应两部分,即X和Y
X = array[:,0:8]
Y = array[:,8]
# 对数据进行标准化处理
scaler = StandardScaler().fit(X)
rescaledX = scaler.transform(X)
# summarize transformed data
numpy.set_printoptions(precision=3)
print(rescaledX[0:5,:])
第7节:通过重采样方法进行算法评估
将数据集切分为训练集和验证集
使用k折交叉验证估算算法的准确性
使用cross_val_score()函数评估交叉验证结果,输出k折交叉验证准确度评分
# 使用交叉验证评估模型
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
# 加载数据
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# 使用k折交叉验证,n-split就是K值,shuffle指是否对数据洗牌,random_state为随机种子
kfold = KFold(n_splits=10,shuffle = True, random_state=7)
# 使用逻辑回归模型,这是一个分类算法
model = LogisticRegression(solver='liblinear')
# 交叉验证,cv代表交叉验证生成器,这里是k折,scoring代表评估规则,输出模型对于10个验证数据集准确度的评估结果
results = cross_val_score(model, X, Y, cv=kfold,scoring='neg_mean_squared_error')
# 打印这10个结果的平均值和标准差
print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0)
未完待续!